/**
 * createTime: 2020/02/14
 * desc: 使用方式 import * as kk from '@/utils/k-utils'
 */
import router from '@/router'
import store from '@/store'
import request from '@/utils/request'
import { Message } from 'element-ui'

/**
 * 获取系统环境，代理头
 */
export function k_get_env() {
  return request.k_env
}

/**
 * 获取当前登录用户名称
 */
export function k_GetUserName() {
  return 'admin'
}

/**
 * 交易提交后调用的函数
 * @param dataObject 后台返回json参数
 * @param fn 交易提交成功后需要执行的函数
 * @param params fn函数的传参
 */
export function tradeSubmitFnc(dataObject,fn,params) {
  if(dataObject.success){
    //判断是否是函数
    if(typeof fn =='function'){
      //执行函数
      fn(params);
    }
    //判断是否进入了审批流
    if (dataObject.returnmsg.indexOf("流程处理") == -1) {
      Message.success("交易成功");
    } else {
      Message.info(dataObject.returnmsg);
    }
  }else{
    Message.success("交易失败");
  }
}

/**
 * 加载数据字段并转换成数组返回
 * @param this_object {this}当前this对象
 * @param dict_name {string}数据字典参数名称
 * @param dict {string}数据字典
 * @returns 数据字典数组[{label:'',value:''},...]
 * @author luojj 2020/02/20
 */
export function k_load_dict(this_object, dict_name, dict) {
  request({
    loading: true,
    url: 'system/base/dict/' + dict + '.json',
    method: 'post'
  }).then(rep => {
    this_object['dict'][dict_name] = rep
  })
}

/**
 * 报表加载数据字典
 * @param this_object {this}当前this对象
 * @param dict_name {string}数据字典参数名称
 * @param dict {string}数据字典
 * @returns 数据字典数组[{label:'',value:''},...]
 * @author luojj 2020/02/27
 */
export function k_load_report_dict(dict, params = {}) {
  return request({
    loading: true,
    url: 'system/base/dict/' + dict + '.json',
    method: 'post',
    params: params
  })
}

/**
 * 加载指定exeid
 * @param service_name {string}服务名称
 * @param exeid {string}数据字典参数名称
 * @param params {json}传参
 * @returns rep
 * @author luojj 2020/02/21
 */
export function k_load_exeid(service_name, exeid, params = {}) {
  params.exeid = exeid
  return request({
    loading: true,
    url: service_name + '/base/comn-query.json',
    method: 'post',
    params: params
  })
}

/**
 * 定义首页路径，用于跳转时使用
 *
 * @type {string}
 */
const dashBoardPath = '/dashboard'

/**
 * 关闭当前标签页
 */
export function k_close_self_page() {
  const current = router.history.current

  const visiedView =
    store.state.tagsView.visitedViews.find(item => item.name === current.name) ||
    store.state.tagsView.cachedViews.find(item => item.name === current.name)

  if (!visiedView) {
    console.error('关闭页面发生错误，当前页面[' + current.name + ']未开启')
    return
  }

  store.dispatch('tagsView/delView', current).then(resp => {
    back()
  })
}

/**
 * 回退上一页面，供内部函数调用
 */
function back() {
  if (store.state.tagsView.visitedViews.length > 0 || store.state.tagsView.cachedViews.length > 0) {
    router.back()
  } else {
    router.push(dashBoardPath)
  }
}

/**
 * 关闭指定页面
 *
 * @param closeRouterName 已开启或已被缓存的页面，取值路由定义的name
 * @param toRouterName 同样是已开启或已被缓存的页面，取值路由定义的name
 */
export function k_close_page(closeRouterName, toRouterName = '') {
  if (!closeRouterName) {
    console.error('关闭页面发生错误，未传递待关闭页面名称')
    return
  }

  const visitedViews = store.state.tagsView.visitedViews
  const cachedViews = store.state.tagsView.cachedViews

  const visiedView =
    visitedViews.find(item => item.name === closeRouterName) ||
    cachedViews.find(item => item.name === closeRouterName)

  if (!visiedView) {
    console.error('关闭页面发生错误，待关闭页面[', closeRouterName, ']未开启')
    return
  }

  store.dispatch('tagsView/delView', visiedView).then(resp => {
    // 如果有前往页面传入
    if (toRouterName) {
      const toView =
          visitedViews.find(item => item.name === toRouterName) ||
          cachedViews.find(item => item.name === toRouterName)

      if (toView) {
        router.push(toView.fullPath)
      } else {
        console.error('跳转页面发生错误，该页面[', toRouterName, ']未被开启，将跳转到上一页面')
        back()
      }
    } else {
      // 无前往页面，则返回上一页面
      back()
    }
  }).catch(error => {
    console.error('关闭页面', visiedView.name, '发生错误', error)
  })
}

/**
 * 执行指定exeid，update类型，非query类型
 * @param service_name
 * @param exeid
 * @param params
 * @returns {*}
 */
export function k_update_exeid(service_name, exeid, params) {
  params.exeid = exeid
  return request({
    loading: true,
    url: service_name + '/base/comn-update.json',
    method: 'post',
    params: params
  })
}

/**
 * 加载指定URL
 * @param service_name {string}服务名称
 * @param url {string}加载地址
 * @param params
 * @returns rep
 * @author luojj 2020/02/21
 */
export function k_load_url(service_name, url, params = {}) {
  params['inputuser'] = this.k_GetUserName()// 当前登录用户名称
  return request({
    loading: true,
    url: service_name + url,
    method: 'post',
    params: params
  })
}

/**
 * 加载url数据字典
 * @param this_object {this}当前this对象
 * @param url {string}请求url
 * @param dict {string}数据字典
 * @returns 无
 * @author luojj 2020/02/21
 */
export function k_load_dict_url(this_object, url, dict) {
  request({
    loading: true,
    url: url,
    method: 'post'
  }).then(rep => {
    // rep接收到的是字符串
    if (typeof rep === 'string') {
      rep = JSON.parse(rep)
    }
    for (var key in rep) {
      this_object['dict'][dict].push(rep[key])
    }
  })
}

/**
 * 加载数据表格table
 * @param this_object {{} & default.methods}当前this对象
 * @param params_name {string}参数名
 * @param service_name {string}服务名
 * @returns 无返回参数
 * @author luojj 2020/02/20
 */
export function k_load_table(this_object, params_name, service_name) {
  this_object['table'][params_name].start = (this_object['table'][params_name].nowPage - 1) * this_object['table'][params_name].limit// 后台分页参数
  this_object['table'][params_name].tableData = []// 清除传参tableData
  return request({
    loading: true,
    url: service_name + '/base/comn-query.json',
    method: 'post',
    params: this_object['table'][params_name]// 请求参数
  }).then(rep => {
    this_object['table'][params_name].total = rep.results// 获取总条数
    this_object['table'][params_name].tableData = rep.rows// 获取返回数据
  })
}

/**
 * 将yyyyMMdd格式日期字符串，转换成yyyy-MM-dd格式的日期字符串
 * @param str
 * @returns {string|*}
 */
export function dateFormat(str) {
  if (str) {
    // str = String(str);
    if (str.length === 8) {
      return str.substr(0, 4) + '-' + str.substr(4, 2) + '-' + str.substr(6, 2)
    }
  }
  return str
}

/**
 * 将HHmmss/HHmm格式日期字符串，转换成HH:mm:ss/HH:mm格式的日期字符串
 * @param str
 * @returns {string|*}
 */
export function timeFormat(str) {
  if (str) {
    // str = String(str)
    if (str.length === 6) {
      return str.substr(0, 2) + ':' + str.substr(2, 2) + ':' + str.substr(4, 2)
    }
    if (str.length === 4) {
      return str.substr(0, 2) + ':' + str.substr(2, 2)
    }
  }
  return str
}

/**
 * 将yyyyMMdd HHmmss格式日期字符串，转换成yyyy-MM-dd HH:mm:ss格式的日期字符串
 */
export function datetimeFormat(str) {
  if (str) {
    str = String(str)
    var strs = str.split(' ')
    if (strs.length === 2) {
      return dateFormat(strs[0]) + ' ' + timeFormat(strs[1])
    }
  }
  return str
}

/**
 * 时间差
 * @param dateStr1
 * @param dateStr2
 * @returns {{HH: number, mm: number, ss: number, day: number}}
 */
export function getTimeDifference(dateStr1, dateStr2) {
  var date1 = new Date(Date.parse(datetimeFormat(dateStr1).replace(/-/g, '/')))
  var date2 = new Date(Date.parse(datetimeFormat(dateStr2).replace(/-/g, '/')))
  var ms = (date2.getTime() - date1.getTime())
  // / 24 / 3600 / 1000
  var day1 = Math.floor(ms / 24 / 3600 / 1000)
  var hh1 = Math.floor((ms / 3600 / 1000) % 24)
  var mm1 = Math.floor((ms / 1000 / 60) % 60)
  var ss1 = Math.floor((ms / 1000) % 60)
  return {
    day: day1,
    HH: hh1,
    mm: mm1,
    ss: ss1
  }
}

/**
 * 获取请求路劲参数值
 * @param name
 * @returns {string}
 */
export function getParameterByName(name) {
  name = name.replace(/[\[]/, '\\\[').replace(/[\]]/, '\\\]')
  var regex = new RegExp('[\\?&]' + name + '=([^&#]*)')
  var results = regex.exec(location.search)
  return results == null ? '' : decodeURIComponent(results[1])
}

/**
 * 迁移原工具类，获取系统参数
 *
 * @param id
 * @param callback
 * @returns {string}
 */
export function getSysParam(id, callback = () => {}) {
  k_load_exeid('system', 'M0000EQ003', {
    paraid: id
  }).then(resp => {
    if (resp.rows.length > 0) {
      callback(resp.rows[0].paravalue)
    }
  })
}

